package com.Multithreading.Synchronization;

import com.Multithreading.Asynchronization.Bank;

// 在Java1.0开始，每个对象都会有一个内部锁，如果一个方法使用了synchronized关键字，将不用显示的声明锁
public class SynchronizedLock extends Bank {
    public SynchronizedLock(int n, double initialBalance) {
        super(n, initialBalance);
    }

    @Override
    public synchronized void transform (int from, int to, double money) throws InterruptedException{
        /*
        * 增加该关键字后的代码等价于：
        *           this.bankLock.lock();// 互斥操作前获得锁
                    try{
                        super.transform(from, to, money);
                    }finally {
                        this.bankLock.unlock();//结束后释放锁
                    }
        * */
        // 但采用该关键字的内部对象锁只有一个条件变量，使用wait 和 notifyAll替代Condition.wait() 和 Condition.signalAll
        // wait();
        super.transform(from, to, money);
        // notifyAll();
    }
}
